大家好,我是小林。
之前有读者问我,学习计算机基础有什么推荐的书?
这一个我就很有心得了,因为我大学的专业并不是计算机专业的,是电气自动化专业的,所以学校的课程并没有操作系统、计算机网络、计算机组成、数据库这类课程,但是还是会有编程课。
所以,计算机基础这些课程都是我自学过来的,期间看过了很多的书,也在中国慕课和 B 站刷过很多视频,踩过不少的坑。
其实在自学过程中,最容易踩坑的地方就是不看自己当前水平,盲目跟风买那些豆瓣高分的大而全的计算机黑皮系列的书,然后学几天,就放弃了。
这些大而全的计算机黑皮书当然很经典,但是它们并不适合新人入门学习,因为这类书籍的内容都充满大量的专业术语,我们人在看到陌生又难以理解的词汇时,就会感觉很吃力,脑子看着就会很累,就会驱使你做简单和快乐的事情,比如睡觉、刷短视频、玩游戏。。。
不要问我,为什么知道的那么清楚,因为我就是这么踩坑过来的。
所以,我认为学习一门学科的时候,要从最基础的书开始学起,接着搭配视频快速入门,然后再渐渐步入到这些大而全的计算机黑皮书。
关键的问题来了,计算机基础有哪些入门的基础书和视频呢?
接下来,我就跟大家分享下,我看过的书和视频,都是从入门再到进阶的路线。
# 一、数据结构与算法很多人同学在大一的时候,就学会了一门编程语言,大概率都是 C 语言,有了一定的编程能力,就可以开始学习数据结构与算法。
数据结构与算法这方面的话是非常非常非常重要的,想要冲大厂的同学们如果这方面不过关可能连笔试都过不去,更别谈面试的手撕算法了。
算法: 动态规划、回溯算法、查找算法、搜索算法、贪心算法、分治算法、位运算、双指针、排序、模拟、数学、…… 数据结构: 数组、栈、队列、字符串、链表、树、图、堆、哈希表、…… # 数据结构学习首先推荐《大话数据结构》这本入门级别的书,因为书里的内容都是大白话,而且还图文并茂,读起来还是很顺畅的。
然后视频推荐《浙江大学的数据结构》课程,在 B 站就能搜索到,课程是老师带大家用 C 语言来实现各种常见的数据结构。
现在大多数高级语言都会有容器,就是把一些常见的数据结构封装成了容器,然后使用起来就比较方便,但是不利于我们理解底层的数据结构是怎么变换和操作的,所以这门课还是很有意义的。
如果想要实战的话,可以去 Leetcode 官方出品的免费教程 Leetbook,网站很细心的按照各个知识点循序渐进地罗列了出来。讲解知识 + 实战演练,学习起来会比看书效率高。
# 算法学习之前有位校招去字节的读者分享过他的算法学习心得,我觉得写的不错,这里我就直接贴出来。
在我看来,笔试能力在校招中要占据 60% 的重要程度。
首先笔试不过,你根本没有面试的展示机会。其次面试中也会反复让你手写代码,以字节为例,每一轮面试都是1-2道编程题,有时候不怎么聊简历;百度每一轮面试有一道编程题。现在公司的面试模式就是这样,如果代码没搞出来,大概率会被淘汰。
并且最窒息的是这些代码题都不简单,一般都是 leetcode 中等到 hard 难度。
刷题主要可从以下三个渠道。
第一个,剑指offer:
https://www.nowcoder.com/ta/coding-interviews
第二个,leetcode:
https://leetcode-cn.com/problemset/algorithms/
第三个,近期面试中常考题:
https://www.nowcoder.com/activity/oj
《剑指 offer》作为大经典,是一定要刷两遍以上的,很多题都是面试时的原题,里面包含了很多笔试常用的思想方法,反复看,反复研。
我一开始每天 10 题,过两遍以后,要求自己每天快速过剑指一遍。
leetcode 由于题目十分之多,刷完是不可能的。我的意见是 leetcode 作为你弱项的专项练习。
leetcode 右侧有标签分类,如下图:
另外在巩固完弱项的情况下,建议将 leetcode 前 300 题刷熟练,据我个人面试经历,国内大厂面试出的代码题 80% 都是这个范围内的。
另外,我在刷题的时候看了 labuladong 总结的算法小抄,对算法的理解很有帮助。
最后根据我的面试经历,根据个人感觉,公司常考题有:
链表类(链表反转类题目) 二叉树类(二叉树的遍历类型题,最大公祖先类题目) 字符串操作题目 dfs/bfs 动态规划(这个考的基本都是 leetcode 上的或者是背包问题,对于动态规划问题其实有很多种类,比较见到的就是一维动态和二维动态),另外还有区间调度类型的题目(贪心算法,也属于动态规划的一种特殊情况。其实也没有什么技巧,多刷题,多理解就好了。
# 二、计算机组成原理计算组成原理确实是分为两个方向,一个是硬件电路的,一个是软件程序的。
我自己本身是干开发的,所以我这次分享的机组资料是跟软化程序有关的,也就是不会涉及到硬件电路的东西,即使你不会数字电路、微机原理也是可以直接学习的。
# 入门学习先极力推荐 b 站的《计算机科学速成课》,这个课程是国外录制的,内容真的是好,视频的动画很精美,讲课的时候不会很死板,反正就是不看后悔、相见很晚系列。
对于入门计算机组成,可以先看前 10 个视频,看完这 10 个视频也就不到 2 个小时,看完前 10 个视频对计算机的工作方式就有一个基本的了解了。
看完前 10 个视频就可以开始看书了。
讲真,不太建议小白一上来就看那些厚的不行的计算机组成原理的黑皮书,这些书是经典的没错,也正是由于它们是经典的,所以这些书的知识体系很全、很多、很厚。
但是这样很容易让初学者迷失在里头,可能刚兴致勃勃看几十页就放弃了,于是这些厚的不行的书就成为了你们的垫书神器,知识没学多少,颈椎病倒是治好了。
对于初学者,我推荐两本书《计算机是怎么样跑起来》和《程序是怎么跑起来的》,这两本很薄而且图文并茂,作者都是用大白话的方式来阐述知识,这点对初学者非常友好。
这两本不用 1 个月就能看完,因为在看这两本书的时候,你会看的很顺畅,相比学习的心态,你